IF OBJECT_ID (N'dbo.getOrdersSum') IS NOT NULL
   DROP FUNCTION dbo.getOrdersSum
GO

CREATE FUNCTION dbo.getOrdersSum ()
RETURNS @OrderSum TABLE 
(
	SalesOrderId int NOT NULL,    
	OrderTotal float NOT NULL,
	Rank varchar(4) NOT NULL
)
AS

BEGIN

	DECLARE @AVG FLOAT
	
	SELECT 
		@AVG = AVG(OrderQty * UnitPrice)
	FROM Sales.SalesOrderDetail
	GROUP BY SalesOrderID
	
	INSERT @OrderSum
		SELECT
			SalesOrderID, 
			SUM(OrderQty * UnitPrice) as [OrderTotal],
			'' AS [Rank]
		FROM Sales.SalesOrderDetail
		GROUP BY SalesOrderID
		ORDER BY 2 DESC

	UPDATE @OrderSum
	SET [Rank] = 'UP' WHERE [OrderTotal] >= @AVG

	UPDATE @OrderSum
	SET [Rank] = 'DOWN' WHERE [OrderTotal] < @AVG

   RETURN
END
GO

SELECT * FROM getOrdersSum()
